const path = require("path");
const fs = require("fs");

const filesPath = [];
function findFiles(dirPath, isAsb = true) {
	// 目录列表
	let dirInstanceList = [];
	// 获取根目录实例
	dirInstanceList.push(getInstance(dirPath));
	// 如果根目录是空,直接返回 []
	if (!dirInstanceList[0].files) {
		return [];
	}
	// 遍历目录实例
	while (dirInstanceList.length !== 0) {
		let dirInstance = dirInstanceList.pop();
		// 遍历目录下的文件
		for (file of dirInstance.files) {
			// 如果是目录,获取目录实例
			if (file.isDirectory()) {
				const childDirInstance = getInstance(
					path.resolve(dirInstance.path, file.name)
				);
				// 如果目录是空目录,直接忽略
				if (!childDirInstance.files) {
					continue;
				} else {
					// 如果目录不为空 则添加进目录列表等待处理
					dirInstanceList.push(childDirInstance);
				}
			} else {
				// 如果是文件 添加到文件路径列表
				if (isAsb) {
					filesPath.push(path.resolve(file.name));
				} else {
					filesPath.push(file.name);
				}
			}
		}
	}
}

function getInstance(dirPath) {
	try {
		const dirInstance = {
			files: fs.readdirSync(dirPath, { withFileTypes: true }),
			path: dirPath,
		};
		return dirInstance; // [{path:路径,files:[文件,文件...]}]
	} catch (e) {
		console.log(`路径都能写错了你是真 2B -> ${path.resolve(dirPath)}`);
		return;
	}
}

function handleRes(dirPath, isAsb) {
	findFiles(dirPath, isAsb);
	return filesPath;
}

module.exports = {
	find: handleRes,
};
